package poly_.detail_;

public class PolyDetail {
    public static void main(String[] args) {
        //向上转型：父类的引用指向了子类的对象
        //语法：父类类型引用名 = new 子类类型();
        Animal animal = new Cat();
        Object obj = new Cat(); // Object也是cat的父类

        //可以调用父类的所有成员（需要遵守访问权限）
        //但是不能调用子类的特有成员
        //因为在编译阶段，能调用哪些成员，是由编译类型来决定的
        animal.sleep();
        animal.eat(); // 最终运行效果看子类的具体实现
        animal.run();
        animal.show();
        System.out.println("ok~");

        //我们现在希望可以调用Cat的catchMouse方法
        //多态的向下转型
        //（1）语法：子类类型 引用名 = (子类类型)父类引用;
        Cat cat = (Cat)animal;
        cat.catchMouse();
        //（2）要求父类的引用必须指向的是当前目标类型的对象
        System.out.println("ok~");
    }
}
